package stardust.core.network.protocol.http;


/**
 * 数据提交方式
 * <p>
 * 方法GET和HEAD应该被所有的通用WEB服务器支持，其他所有方法的实现是可选的。
 * <p/>
 * @author 陈昶
 */
public enum HttpMethod
{

  /**
   * CONNECT 在 HTTP 代理协议中被扩展。
   */
  connect("CONNECT"),
  /**
   * GET 取回由Request-URI标识的信息。
   */
  get("GET"),
  /**
   * HEAD 取回由Request-URI标识的信息，只是可以在响应时，不返回消息体。
   */
  head("HEAD"),
  /**
   * POST 请求服务器接收包含在请求中的实体信息，可以用于提交表单，向新闻组、BBS、邮件群组和数据库发送消息。
   */
  post("POST"),
  /**
   * PUT
   */
  put("PUT"),
  /**
   * DELETE
   */
  delete("DELETE"),
  /**
   * OPTIONS
   */
  options("OPTIONS"),
  /**
   * TRACE
   */
  trace("TRACE");

  public final String value;

  private HttpMethod(String value)
  {
    this.value = value;
  }

  public String getValue()
  {
    return this.value;
  }

  public static HttpMethod get(String value)
  {
    HttpMethod[] types = HttpMethod.values();

    for (int i = 0; i < types.length; i++)
    {
      if (types[i].value.equalsIgnoreCase(value))
      {
        return types[i];
      }
    }

    return null;
  }

  public String toString()
  {
    return this.getValue();
  }

}
